class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    # property装饰器，用来将一个get方法，转换为对象的属性
    # 添加为property装饰器以后，我们就可以像调用属性一样使用get方法
    # 使用property装饰的方法，必须和属性名是一样的
    @property
    def name(self):
        print('get方法执行了~~~')
        return self._name

    # setter方法的装饰器：@属性名.setter
    @name.setter
    def name(self, name):
        print('setter方法调用了')
        self._name = name

    @property
    def age(self):
        return self._age

    @property
    def sex(self):
        return self._sex

    @sex.setter
    def sex(self, sex):
        self._sex = sex


p = Person('猪八戒', 18)
p._name = '孙悟空'
p._age = 100
print(p.name, p.age)
p.sex = 18
print(p.sex)
print('=========================================')


class Dog:
    def __init__(self):
        pass

    @property
    def name(self):
        print('get方法执行了~~~')
        return self._name

    # setter方法的装饰器：@属性名.setter
    @name.setter
    def name(self, name):
        self._name = name
        print('setter方法调用了')


dog = Dog()
dog.name = '旺财'
print(dog.name)  # 对外暴露的属性
print(dog._name)  # 私有属性
